AWS ParallelCluster のコンピュートノードでベアメタルインスタンスを使ってみた
AWS ParallelCluster でベアメタルインスタンスをコンピュートノードとして利用できるのか検証する機会がありましたので紹介します。
確認結果
- ベアメタルインスタンスをコンピュートノードで起動できる
- スポットインスタンス起動もサポートしている
- ベアメタルインスタンスと通常のインスタンスの性能差はほぼない(AWSブログより)
検証環境
AWS ParallelCluster はバージョン 3.6.1 を利用しています。
# pcluster version { "version": "3.6.1" }
動作確認してみる
事の発端は 96vCPU のインスタンスのスポット起動確率を高めるために、同じ vCPU 数のインスタンスタイプを 1 つのキューに登録しようと考えていました。.24xlarge の C 系、M 系、R 系インスタンスかなと思いながらスポット料金をチェックしていたら、ベアメタルインスタンス(.metal)の存在に気づきました。スポット料金も大差ないし、.24xlarge と併用するならベストチョイスなのでは?と思ったのですが、ParallelCluster で動作するのか不明でした。疑問を解消するべくコンピュートノードにベアメタルインスタンスを採用したクラスターを作成して確認してみます。
$ spotinfo --region ap-northeast-1 --sort price --cpu 96 | head -n 20 ┌─────────────────┬──────┬────────────┬────────────────────────┬───────────────────────────┬──────────┐ │ INSTANCE INFO │ VCPU │ MEMORY GIB │ SAVINGS OVER ON-DEMAND │ FREQUENCY OF INTERRUPTION │ USD/HOUR │ ├─────────────────┼──────┼────────────┼────────────────────────┼───────────────────────────┼──────────┤ │ c5a.24xlarge │ 96 │ 192 │ 65% │ 5-10% │ 1.5968 │ ├─────────────────┼──────┼────────────┼────────────────────────┼───────────────────────────┼──────────┤ │ c5.24xlarge │ 96 │ 192 │ 69% │ 5-10% │ 1.5968 │ ├─────────────────┼──────┼────────────┼────────────────────────┼───────────────────────────┼──────────┤ │ c5.metal │ 96 │ 192 │ 69% │ 5-10% │ 1.5968 │ ├─────────────────┼──────┼────────────┼────────────────────────┼───────────────────────────┼──────────┤ │ c5d.24xlarge │ 96 │ 192 │ 73% │ 5-10% │ 1.5968 │ ├─────────────────┼──────┼────────────┼────────────────────────┼───────────────────────────┼──────────┤ │ c5d.metal │ 96 │ 192 │ 73% │ 10-15% │ 1.5968 │ ├─────────────────┼──────┼────────────┼────────────────────────┼───────────────────────────┼──────────┤ │ c6a.24xlarge │ 96 │ 192 │ 64% │ 10-15% │ 1.6766 │ ├─────────────────┼──────┼────────────┼────────────────────────┼───────────────────────────┼──────────┤ │ m5dn.24xlarge │ 96 │ 384 │ 80% │ <5% │ 1.6766 │ ├─────────────────┼──────┼────────────┼────────────────────────┼───────────────────────────┼──────────┤ │ m5n.24xlarge │ 96 │ 384 │ 77% │ 5-10% │ 1.6766 │ ├─────────────────┼──────┼────────────┼────────────────────────┼───────────────────────────┼──────────┤ │ m5a.24xlarge │ 96 │ 384 │ 69% │ 5-10% │ 1.6766 │
クラスターコンフィグの作成
.metal
タイプのインスタンスをコンピュートノードで起動できるコンフィグを作成しました。以下のコンフィグからクラスターを作成します。
Region: ap-northeast-1 Image: Os: ubuntu2004 Tags: - Key: Name Value: BareMetalCluster # ---------------------------------------------------------------- # Head Node Settings # ---------------------------------------------------------------- HeadNode: InstanceType: t3.micro Networking: ElasticIp: false SubnetId: subnet-035be95eeaa091603 Ssh: KeyName: sandbox-key LocalStorage: RootVolume: Size: 35 Encrypted: true VolumeType: gp3 Iops: 3000 Throughput: 125 # CustomActions: # OnNodeConfigured: Iam: AdditionalIamPolicies: - Policy: arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore S3Access: - BucketName: hpc-dev-postinstall-files EnableWriteAccess: false # ---------------------------------------------------------------- # Compute Node Settings # ---------------------------------------------------------------- Scheduling: Scheduler: slurm SlurmSettings: ScaledownIdletime: 5 SlurmQueues: # ------ Compute 1 ------ - Name: queue1 ComputeResources: - Name: queue1 Instances: - InstanceType: c5d.metal - InstanceType: c5.metal - InstanceType: m5.metal - InstanceType: m5n.metal - InstanceType: m5dn.metal MinCount: 0 MaxCount: 10 DisableSimultaneousMultithreading: true ComputeSettings: LocalStorage: RootVolume: Size: 35 Encrypted: true VolumeType: gp3 Iops: 3000 Throughput: 125 CapacityType: SPOT AllocationStrategy: lowest-price Networking: SubnetIds: - subnet-035be95eeaa091603 PlacementGroup: Enabled: false Iam: AdditionalIamPolicies: - Policy: arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore S3Access: - BucketName: hpc-dev-postinstall-files EnableWriteAccess: false # ---------------------------------------------------------------- # Shared Storage Settings # ---------------------------------------------------------------- SharedStorage: - MountDir: /mnt/efs-1zone Name: efs-1zone StorageType: Efs EfsSettings: FileSystemId: fs-0f1158ade79354809 # ---------------------------------------------------------------- # Other Settings # ---------------------------------------------------------------- Monitoring: Logs: CloudWatch: Enabled: true # RetentionInDays: 30 DeletionPolicy: "Delete" Dashboards: CloudWatch: Enabled: false
コンピュートノードの確認
ヘッドノードからテストジョブを投げてコンピュートノードを起動させました。
ベアメタルインスタンスもスポットインスタンスで起動できました。
コンピュートノードを起動させるにあたりlscpu
コマンドを実行するジョブを投げていました。実行結果からVirtualization: VT-x
の表示を確認でき、ハイバーバイザーが間にないことがわかります。
rchitecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian Address sizes: 46 bits physical, 48 bits virtual CPU(s): 96 On-line CPU(s) list: 0-47 Off-line CPU(s) list: 48-95 Thread(s) per core: 1 Core(s) per socket: 24 Socket(s): 2 NUMA node(s): 2 Vendor ID: GenuineIntel CPU family: 6 Model: 85 Model name: Intel(R) Xeon(R) Platinum 8275CL CPU @ 3.00GHz Stepping: 7 CPU MHz: 3000.000 CPU max MHz: 3900.0000 CPU min MHz: 1200.0000 BogoMIPS: 6000.00 Virtualization: VT-x L1d cache: 1.5 MiB L1i cache: 1.5 MiB L2 cache: 48 MiB L3 cache: 71.5 MiB NUMA node0 CPU(s): 0-23 NUMA node1 CPU(s): 24-47 Vulnerability Itlb multihit: KVM: Mitigation: VMX disabled Vulnerability L1tf: Not affected Vulnerability Mds: Not affected Vulnerability Meltdown: Not affected Vulnerability Mmio stale data: Mitigation; Clear CPU buffers; SMT disabled Vulnerability Retbleed: Mitigation; Enhanced IBRS Vulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl and seccomp Vulnerability Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization Vulnerability Spectre v2: Mitigation; Enhanced IBRS, IBPB conditional, RSB filling, PBRSB-eIBRS SW sequence Vulnerability Srbds: Not affected Vulnerability Tsx async abort: Mitigation; TSX disabled Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pnipclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb cat_l3 cdp_l3 invpcid_single intel_ppin ssbd mba ibrs ibpb stibp ibrs_enhanced tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid cqm mpx rdt_a avx512f avx512dq rdseed adx smap clflushopt clwb intel_pt avx512cd avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts hwp hwp_act_window hwp_epp hwp_pkg_req pku ospke avx512_vnni md_clear flush_l1d arch_capabilities
ユースケースを考えてみた
ベアメタルインスタンスのスポット起動を ParallelCluster がサポートしていることを確認しました。ベアメタルインスタンスを使うケースを考えみました。
同じ vCPU 数のインスタンスタイプの代用
1 台のインスタンスで 96vCPU 以上を使うような大規模計算をする際、ベアメタルインスタンスを使うまたは併用する。
マルチ AZ 対応で複数インスタンスタイプを指定したキューを作成するとき、vCPU 数をあわせる必要があります。.metal も組み込むことでスポットインスタンスの起動確率を向上させる際にも良い手だと考えています。
ライセンス要件の回避
商用 HPC アプリケーションのライセンス要件によって仮想化環境で制限がある場合、非仮想化環境のインスタンスで実行できる。
商用アプリの場合は、仮想化、非仮想の前にクラウドで利用できるか?の確認で手こずることが多い印象があります。
Nitro Hypervisor がない分、性能は有利ですか?
Nitro Hypervisor が優秀でオーバーヘッドがほぼほぼなく、性能差は極僅かでした。詳細は性能比較している以下のブログをご確認ください。
おわりに
ベアメタルインスタンスは利用する機会がなくて存在を希薄でした。ParallelCluster でも利用できることが確認できたため、大きなインスタンスタイプを利用するときは検討対象に入れたいと思います。
ベアメタルインスタンスは Dedicated Hosts と混同しがちですが、ハイバーバイザーの有無の違いがあります。
Q: 専有ホストはベアメタル製品とどのように異なりますか? A: 専有ホストには仮想化ソフトウェア (Xen または Nitro Hypervisor) が事前インストールされていますが、ベアメタルサーバーには仮想化ソフトウェアが事前インストールされていません。ベアメタルサーバーは、独自のハイパーバイザーを使用したいお客様、または仮想化されていない環境で実行する必要のあるアプリケーションを対象としています。 Amazon EC2 専有ホストのよくある質問 - アマゾン ウェブ サービス
その他には M1 Mac の Decdicated Hosts の様に最低でも 24 時間の利用料が発生するものもあります。